package Gui;

import java.awt.Point;
import java.util.ArrayList;
/**
 *
 * @author Leo
 */
public class Colisoes {

    

    double calcularDistanciaIR(Point posicao, ArrayList<Obstaculo> obstaculos, int sentido) { //calcula Distancia Infravermelho

        double distanciaMinima0 = 0;
        double distanciaMinima1 = 0;
        double distanciaMinima2 = 0;
        double distanciaMinima3 = 0;
        double distanciaTemp0 = Double.MAX_VALUE;
        double distanciaTemp1 = Double.MAX_VALUE;
        double distanciaTemp2 = Double.MAX_VALUE;
        double distanciaTemp3 = Double.MAX_VALUE;
//
//        //alcance do infravermelho = 70
//
        if (sentido == 0) { //sentido do movimento de baixo para cima
            for (int i = 0; i < obstaculos.size(); i++) {

                if(obstaculos.get(i).getXinicial() < (posicao.x + 35)  && obstaculos.get(i).getXfinal() > posicao.x)
                {
                    distanciaMinima0 = Math.abs((posicao.y +23 ) - obstaculos.get(i).getYfinal());

                    if(distanciaMinima0 < 99 && distanciaMinima0 < distanciaTemp0)
                    {
                        distanciaTemp0 = distanciaMinima0;
                    }
                    else
                    {
                        if(distanciaTemp0 > distanciaMinima0)
                            distanciaMinima0 = 99;
                    }
                }
                else
                {
                    distanciaMinima0 = 99.0;
                }
            }
            return distanciaMinima0;
        }

        if (sentido == 1) { //sentido do movimento da esquerda para a direita
            for (int i = 0; i < obstaculos.size(); i++) {

                if(obstaculos.get(i).getYinicial() < (posicao.y + 35) && obstaculos.get(i).getYfinal() > posicao.y)
                {
                    distanciaMinima1 = Math.abs((posicao.x + 12) - obstaculos.get(i).getXinicial());

                    if (distanciaMinima1 < 99 && distanciaMinima1 < distanciaTemp1) {
                        distanciaTemp1 = distanciaMinima1;
                    }
                    else
                    {
                        if (distanciaTemp1 > distanciaMinima1)
                        {
                            distanciaMinima1 = 99.0;
                        }
                    }
                }
                else
                {
                    distanciaMinima1 =  99.0;
                }
            }
            return distanciaMinima1;
        }

        if (sentido == 2) { //sentido do movimento de cima para baixo
            for (int i = 0; i < obstaculos.size(); i++) {

                if(obstaculos.get(i).getXinicial() < (posicao.x + 35)  && obstaculos.get(i).getXfinal() > posicao.x)
                {
                    distanciaMinima2 = Math.abs((posicao.y + 12) - obstaculos.get(i).getYinicial());

                    if(distanciaMinima2 < 99 && distanciaMinima2 < distanciaTemp2)
                    {
                        distanciaTemp2 = distanciaMinima2;
                    }
                    else
                    {
                        if(distanciaTemp2 > distanciaMinima2)
                            distanciaMinima2 = 99;
                    }
                }
                else
                {
                    distanciaMinima2 = 99;
                }
            }
            return distanciaMinima2;
        }

        if (sentido == 3) { //sentido do movimento da direita para a esquerda
            for (int i = 0; i < obstaculos.size(); i++) {

                if(obstaculos.get(i).getYinicial() < (posicao.y + 35) && obstaculos.get(i).getYfinal() > posicao.y)
                {
                    distanciaMinima3 = Math.abs((posicao.x+20) - obstaculos.get(i).getXfinal());

                    if(distanciaMinima3 < 99 && distanciaMinima3 < distanciaTemp3)
                    {
                        distanciaTemp3 = distanciaMinima3;
                    }
                    else
                    {
                        if(distanciaTemp3 > distanciaMinima3)
                            distanciaMinima3 = 99;
                    }
                }
                else
                {
                    distanciaMinima3 = 99.0;
                }
            }
            return distanciaMinima3;
        }
       return 0.0;
    }
//
//
//    alcance do sonar distância = 140

    double calcularDistanciaSonar(Point posicao, ArrayList<Obstaculo> obstaculos, int sentido) { //calcula Distancia do Sonar
        double distanciaMinima0 = 0;
        double distanciaMinima1 = 0;
        double distanciaMinima2 = 0;
        double distanciaMinima3 = 0;
        double distanciaTemp0 = Double.MAX_VALUE;
        double distanciaTemp1 = Double.MAX_VALUE;
        double distanciaTemp2 = Double.MAX_VALUE;
        double distanciaTemp3 = Double.MAX_VALUE;

        if (sentido == 0) { //sentido do movimento de baixo para cima
            for (int i = 0; i < obstaculos.size(); i++) {

                if(obstaculos.get(i).getXinicial() < (posicao.x + 35)  && obstaculos.get(i).getXfinal() > posicao.x)
                {
                    distanciaMinima0 = Math.abs((posicao.y + 50 ) - obstaculos.get(i).getYfinal());

                    if(distanciaMinima0 < 199 && distanciaMinima0 < distanciaTemp0)
                    {
                        distanciaTemp0 = distanciaMinima0;
                    }
                    else
                    {
                        if(distanciaTemp0 > distanciaMinima0)
                            distanciaMinima0 = 199;
                    }
                }
                else
                {
                    distanciaMinima0 = 199.0;
                }
            }
            return distanciaMinima0;
        }

        if (sentido == 1) { //sentido do movimento da esquerda para a direita
            for (int i = 0; i < obstaculos.size(); i++) {

                    if(obstaculos.get(i).getYinicial() < (posicao.y + 35)  && obstaculos.get(i).getYfinal() > posicao.y)
                    {
                        distanciaMinima1 = Math.abs((posicao.x -12 ) - obstaculos.get(i).getXinicial());

                    if(distanciaMinima1 < 199 && distanciaMinima1 < distanciaTemp1)
                    {
                        distanciaTemp1 = distanciaMinima1;
                    }
                    else
                    {
                        if(distanciaTemp1 > distanciaMinima1)
                            distanciaMinima1 = 199;
                    }
                }
                else
                {
                    distanciaMinima1 = 199.0;
                }
            }
            return distanciaMinima1;
        }

        if (sentido == 2) { //sentido do movimento de cima para baixo
            for (int i = 0; i < obstaculos.size(); i++) {

                if(obstaculos.get(i).getXinicial() < (posicao.x + 35)  && obstaculos.get(i).getXfinal() > posicao.x)
                {
                    distanciaMinima2 = Math.abs((posicao.y - 35) - obstaculos.get(i).getYinicial());

                    if(distanciaMinima2 < 199 && distanciaMinima2 < distanciaTemp2)
                    {
                        distanciaTemp2 = distanciaMinima2;
                    }
                    else
                    {
                        if(distanciaTemp2 > distanciaMinima2)
                            distanciaMinima2 = 199;
                    }
                }
                else
                {
                    distanciaMinima2 = 199;
                }
            }
            return distanciaMinima2;
        }

        if (sentido == 3) { //sentido do movimento da direita para esquerda
            for (int i = 0; i < obstaculos.size(); i++) {

                if(obstaculos.get(i).getYinicial() < (posicao.y + 35)  && obstaculos.get(i).getYfinal() > posicao.y)
                {
                    distanciaMinima3 = Math.abs((posicao.x + 45) - obstaculos.get(i).getXfinal());

                    if(distanciaMinima3 < 199 && distanciaMinima3 < distanciaTemp3)
                    {
                        distanciaTemp3 = distanciaMinima3;
                    }
                    else
                    {
                        if(distanciaTemp3 > distanciaMinima3)
                            distanciaMinima3 = 199;
                    }
                }
                else
                {
                    distanciaMinima3 = 199;
                }
            }
            return distanciaMinima3;
        }
       return 0.0;
    }

    // aberturamáxima de ângulo do sonar = 30

    double calcularAngulo(Point posicao, ArrayList<Obstaculo> obstaculos, int sentido) { //calcula angulo de colisao

    return 0.0;
    }
}